# coding:utf-8

import os

"""配置信息"""
SECRET_KEY = "sadfjnklsahjfd1354asdas"

# 数据库连接配置
DIALECT = 'mysql'
DRIVER = 'pymysql'
USERNAME = 'root'
PASSWORD = 'idealwifi@2019'
# PASSWORD = 'lpc123LPC'
HOST = '59.65.232.231'
# HOST = '127.0.0.1'
PORT = '13306'
# PORT = '3306'
DATABASE = 'soft_course'

SQLALCHEMY_DATABASE_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT,
                                                                       DATABASE)

# 数据库连接快速手写数据库配置
# SQLALCHEMY_DATABASE_URI = "mysql+mysqldb://root:idealwifi@2020@115.29.137.201:13306/webspider?charset=utf8"

SQLALCHEMY_TRACK_MODIFICATIONS = True

# 数据库池的大小。 默认与数据库引擎的值相同 (通常为 5)
SQLALCHEMY_POOL_SIZE = 50

# 控制连接池达到最大大小后还可以创建的连接数，当这些附加连接返回到连接池时，它们将会被断开并丢弃。
SQLALCHEMY_MAX_OVERFLOW = 10

# token的有效期,单位：秒
TOKEN_EXPIRES = 3600

# 图片验证码的redis有效期, 单位：秒
IMAGE_CODE_REDIS_EXPIRES = 180

'''
  爬虫程序相关的常用参数配置
'''
# Base_URL地址 需要拼接网址时，配置基础URL地址
Base_URL = "https://www.runoob.com/"

# 代理池地址
PORXY_POOL_URL = 'http://139.9.128.8:5555/random'

#爬虫程序处理记录数范围--如果需要的时候使用
DATA_SPIDER_START = 1000000
DATA_SPIDER_END = 2000000

# JS引擎Splash服务器地址；
SPLASH_URL = 'http://10.21.32.1:8050/'

# Splash服务名称(用于监听脚本重启)
SPLASH_NAME = 'awesome_wescoff'

# 资源(页面)尝试获取访问次数
Access_Request_TIMES = 3

# 爬虫等待时间(秒)
WAITE_TIME = 10

# 临时文件夹路径
TEMP_DIR = "E:\\tempfile\\"

# 文件下载路径
DOWNLOAD_FILE_DIR = "E:\\downloadfiles\\"

# 数据库读取记录--每页的条数
PAGE_SIZE = 1000

# 默认创建进程数
PROCESS_SIZE = 4

# 默认日志格式
DEFAULT_LOG_FMT = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s'
# 默认时间格式
DEFUALT_LOG_DATEFMT = '%Y-%m-%d %H:%M:%S'
# 输出日志路径
LOG_OUT_PATH = os.path.join(os.path.dirname(__file__), 'logs', 'log')


# 上传图片配置
# linux和windows通用写法
UPLOADED_PHOTOS_DEST = os.sep.join(
    [os.path.dirname(os.path.realpath(__file__)), 'app', 'static', 'images', 'uploads'])

# 上传文件的配置
UPLOADED_FILES_DEST = os.sep.join([os.path.dirname(os.path.realpath(__file__)), 'app', 'static', 'files'])

# 上传XXX模板文件的配置
UPLOADED_TEMPLATE_DEST = os.sep.join(
    [os.path.dirname(os.path.realpath(__file__)), 'app', 'static', 'files', 'template'])



# 请求头列表
HEAD_LIST = [
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60',
    'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50',
    'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
    'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
    'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',
    'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)"',
    'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',
    'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36']

Cookie_Temp = "__guid=144548670.3998153801655085000.1599626835610.818; ZCY86LINKS=-Co9uJW3dExW5JoSTkRUGB5glDZFeFDmqRGVjZS61yRh8VNqFIAkUL3q78vGRN3r; monitor_count=1; Hm_lvt_c7663d800c04b77c617598afd4f84e0c=1599626837,1599829872; Hm_lpvt_c7663d800c04b77c617598afd4f84e0c=1599829872"

# selenium默认driver路径
SELENIUM_DEFAULT_PATH = 'D:\python\wendriver\chromedriver.exe'

# 状态码信息
STATUS_CODE_GROUP = [{'status_code': '1**', 'message': '信息，服务器收到请求，需要请求者继续执行操作'},
                     {'status_code': '2**', 'message': '成功，操作被成功接收并处理'},
                     {'status_code': '3**', 'message': '重定向，需要进一步的操作以完成请求'},
                     {'status_code': '4**', 'message': '客户端错误，请求包含语法错误或无法完成请求'},
                     {'status_code': '5**', 'message': '服务器错误，服务器在处理请求的过程中发生了错误'}]

STATUS_CODE_INFO = [{'status_code': '101', 'name': 'Switching Protocols', 'message': '切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议，例如，切换到HTTP的新版本协议'},
                    {'status_code': '200', 'name': 'OK', 'message': '请求成功。一般用于GET与POST请求'},
                    {'status_code': '201', 'name': 'Created', 'message': '已创建。成功请求并创建了新的资源'},
                    {'status_code': '202', 'name': 'Accepted', 'message': '已接受。已经接受请求，但未处理完成'},
                    {'status_code': '203', 'name': 'Non-Authoritative Information', 'message': '非授权信息。请求成功。但返回的meta信息不在原始的服务器，而是一个副本'},
                    {'status_code': '204', 'name': 'No Content', 'message': '无内容。服务器成功处理，但未返回内容。在未更新网页的情况下，可确保浏览器继续显示当前文档'},
                    {'status_code': '205', 'name': 'Reset Content', 'message': '重置内容。服务器处理成功，用户终端（例如：浏览器）应重置文档视图。可通过此返回码清除浏览器的表单域'},
                    {'status_code': '206', 'name': 'Partial Content', 'message': '部分内容。服务器成功处理了部分GET请求'},
                    {'status_code': '300', 'name': 'Multiple Choices', 'message': '多种选择。请求的资源可包括多个位置，相应可返回一个资源特征与地址的列表用于用户终端（例如：浏览器）选择'},
                    {'status_code': '301', 'name': 'Moved Permanently', 'message': '永久移动。请求的资源已被永久的移动到新URI，返回信息会包括新的URI，浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替'},
                    {'status_code': '302', 'name': 'Found', 'message': '临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI'},
                    {'status_code': '303', 'name': 'See Other', 'message': '查看其它地址。与301类似。使用GET和POST请求查看'},
                    {'status_code': '304', 'name': 'Not Modified', 'message': '未修改。所请求的资源未修改，服务器返回此状态码时，不会返回任何资源。客户端通常会缓存访问过的资源，通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源'},
                    {'status_code': '305', 'name': 'Use Proxy', 'message': '使用代理。所请求的资源必须通过代理访问'},
                    {'status_code': '306', 'name': 'Unused', 'message': '已经被废弃的HTTP状态码'},
                    {'status_code': '307', 'name': 'Temporary Redirect', 'message': '临时重定向。与302类似。使用GET请求重定向'},
                    {'status_code': '400', 'name': 'Bad Request', 'message': '客户端请求的语法错误，服务器无法理解'},
                    {'status_code': '401', 'name': 'Unauthorized', 'message': '请求要求用户的身份认证'},
                    {'status_code': '402', 'name': 'Payment Required', 'message': '保留，将来使用'},
                    {'status_code': '403', 'name': 'Forbidden', 'message': '服务器理解请求客户端的请求，但是拒绝执行此请求'},
                    {'status_code': '404', 'name': 'Not Found', 'message': '服务器无法根据客户端的请求找到资源（网页）。通过此代码，网站设计人员可设置"您所请求的资源无法找到"的个性页面'},
                    {'status_code': '405', 'name': 'Method Not Allowed', 'message': '客户端请求中的方法被禁止'},
                    {'status_code': '406', 'name': 'Not Acceptable', 'message': '服务器无法根据客户端请求的内容特性完成请求'},
                    {'status_code': '407', 'name': 'Proxy Authentication Required', 'message': '请求要求代理的身份认证，与401类似，但请求者应当使用代理进行授权'},
                    {'status_code': '408', 'name': 'Request Time-out', 'message': '服务器等待客户端发送的请求时间过长，超时'},
                    {'status_code': '409', 'name': 'Conflict', 'message': '服务器完成客户端的 PUT 请求时可能返回此代码，服务器处理请求时发生了冲突'},
                    {'status_code': '410', 'name': 'Gone', 'message': '客户端请求的资源已经不存在。410不同于404，如果资源以前有现在被永久删除了可使用410代码，网站设计人员可通过301代码指定资源的新位置'},
                    {'status_code': '411', 'name': 'Length Required', 'message': '服务器无法处理客户端发送的不带Content-Length的请求信息'},
                    {'status_code': '412', 'name': 'Precondition Failed', 'message': '客户端请求信息的先决条件错误'},
                    {'status_code': '413', 'name': 'Request Entity Too Large', 'message': '由于请求的实体过大，服务器无法处理，因此拒绝请求。为防止客户端的连续请求，服务器可能会关闭连接。如果只是服务器暂时无法处理，则会包含一个Retry-After的响应信息'},
                    {'status_code': '414', 'name': 'Request-URI Too Large', 'message': '请求的URI过长（URI通常为网址），服务器无法处理'},
                    {'status_code': '415', 'name': 'Unsupported Media Type', 'message': '服务器无法处理请求附带的媒体格式'},
                    {'status_code': '416', 'name': 'Requested range not satisfiable', 'message': '客户端请求的范围无效'},
                    {'status_code': '417', 'name': 'Expectation Failed', 'message': '服务器无法满足Expect的请求头信息'},
                    {'status_code': '500', 'name': 'Internal Server Error', 'message': '服务器内部错误，无法完成请求'},
                    {'status_code': '501', 'name': 'Not Implemented', 'message': '服务器不支持请求的功能，无法完成请求'},
                    {'status_code': '502', 'name': 'Bad Gateway', 'message': '作为网关或者代理工作的服务器尝试执行请求时，从远程服务器接收到了一个无效的响应'},
                    {'status_code': '503', 'name': 'Service Unavailable', 'message': '由于超载或系统维护，服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中'},
                    {'status_code': '504', 'name': 'Gateway Time-out', 'message': '充当网关或代理的服务器，未及时从远端服务器获取请求'},
                    {'status_code': '505', 'name': 'HTTP Version not supported', 'message': '服务器不支持请求的HTTP协议的版本，无法完成处理'}]

